Read Buf

Read Buf

Redis 及其创建者 antirez 的故事

在数据库世界中,Redis 独树一帜。使用 Redis,您可以直接与链表和哈希表等低级数据结构交互,而不是大多数数据库的中心焦点通常的表或文档。

这都要归功于 Redis 的创造者 Salvatore Sanfilippo(网上称为 antirez)的创新设计。作为系统编程大师,antirez 更喜欢从列表、散列和集合等数据结构的角度来思考问题。而其他更高级别的数据表示,例如表格或文档,不符合他的口味。在创建 Redis 时,antirez 是数据库领域的业余爱好者。但也许正是这种经验的缺乏让他能够为这个行业带来新鲜的想法。

如今,Redis 已成为主流,其足迹几乎出现在所有 Web 服务中。根据 Stack Overflow 的调查,Redis 已连续五年成为最受欢迎的数据库。

antirez

antirez 的早年生活

antirez 在意大利西西里岛长大,他的父亲是一家石化公司的电工,负责处理工业自动化问题。在 80 年代,他的父亲开始使用可编程逻辑控制器(PLC),他对这些控制器的兴趣促使他购买了Z80处理器板并开始在其上编程。

当 antirez 六岁时,他的家人得到了他们的第一台个人电脑,一台 TI99/4A。虽然它在商业上并不成功,但它是一台有趣的机器。他的父亲会在上面写一些 BASIC 程序,antirez 很快就效仿了,在他上一年级的时候就学会了打字和抄写 BASIC 程序。

随着年龄的增长,antirez 继续编程。然而,到 14 岁时,摩托车和女孩等典型的青少年兴趣开始占据主导地位,编程退居二线。直到 18 或 19 岁时,他才重新发现自己对计算机、玩 3D 建模和游戏以及编写简单程序的热情。在巴勒莫大学学习建筑时,他使用 BASIC 绘图,这是他从小就知道的唯一编程语言。

安全实验室

有一天,antirez 想买一张显卡,却误买了调制解调器。当零售商拒绝退款时,他只是同意了,说:“好吧,我想那是调制解调器!” 那是 90 年代,互联网正在成为一种东西。他上网,安装了 Linux,并开始对信息安全产生兴趣。他买了一本关于 C 编程语言的书并开始学习。不久,他发现了 ping 程序的漏洞。

漏洞是这样的:Unix通常有一个限制,如果你不是root,你不能在短时间内快速发送大量数据包。但是 antirez 找到了一种使用 Unix 信号绕过此限制的方法。

他于1998 年 4 月在 Bugtraq 邮件列表上发布了他的发现。Bugtraq 是一个关于网络安全的邮件列表,来自世界各地的安全专家将在这里发布安全问题。第二天,安蒂雷兹接到了米兰打来的长途电话;一家名为 SECLAB 的网络安全公司希望他为他们工作。

antirez 惊讶地回应道:“但我只是一个建筑专业的学生。我什么都不会。” 但SECLAB的老板还是鼓励他来米兰聊聊。与他们会面后,店主告诉安特雷兹:“继续你的生活,但读完这十本书,然后再回来找我。” 这些书都是关于网络的,比如 TCP/IP 协议、防火墙、应用程序安全和密码学。因此,在 1998 年的夏天,antirez 整天都在西西里岛的海岸上阅读这些书。

9 月,antirez 回到了 SECLAB,SECLAB 想雇用他。他从大学休假并搬到米兰工作。在他的第一次会议中,他听不懂同事们在说什么,他觉得自己完全是个冒名顶替者。一些意大利最优秀的黑客当时在 SECLAB 工作。antirez在潜伏两个月后开始贡献力量。

首先,antirez 发明了一种称为Idle Scan 的攻击,它仍然是 Nmap 中著名的攻击之一,仍在研究中。SECLAB 的所有者认为 antirez 对开源社区的贡献比与客户打交道更有价值,因此鼓励他专注于编写开源软件和研究网络攻击。

此外,antirez 创建了一个名为hping的工具,这是一个命令行工具,可让您发送自定义 TCP/IP 数据包。它的用途与 ping 类似,但不必像 ping 一样遵循 ICMP 协议,因此 hping 可以做更多的事情,例如测试防火墙规则、测试网络性能以及通过防火墙传输文件。

在 SECLAB 工作六个月后,antirez 离开了。他开始熬夜上班迟到。米兰这个繁华的城市,对于一个21岁的人来说有点太过诱惑了,没有良好的自律很容易迷失自我。尽管他在那里的时间很短,但在这六个月里,antirez 编写了大量的 C 程序并参与了许多项目,标志着他职业生涯的一个重要转折点。

创办自己的公司 Merzia

2000 年,antirez 加入了Linuxcare Italia,这是一家处理开源软件的公司。他能够在家远程工作,一切都很顺利,直到互联网泡沫破灭。一天,该公司向其员工发送了一封电子邮件,主要内容是:“我们将关闭在 18 个国家/地区的业务,一个月后,你们都将失业。晚安。”

2001 年,23 岁的 antirez 需要抚养一个孩子,他需要找到一种方法来维持生计。他开始编写 PHP,负责前端和后端开发,并为客户开发小项目。

2005 年是 Web 2.0 的曙光,他和他的朋友 Fabio Pitrola 创立了一家名为Merzia的公司,旨在为意大利市场创建 Web 2.0 应用程序。意大利主要电信公司 Telecom Italia 看到了他们的所作所为,并与他们建立了合作关系。Telecom Italia 最终购买了他们开发的两个网站:社交新闻网站OKNOtizie和类似于 Delicious 的书签网站Segnalo 。

LLOOGG 和 Redis 的诞生

几年后,antirez 和他的朋友决定专注于一个新领域:网络分析。他们的目标是为博主创建一个工具,使他们能够监控访问者的实时行为。例如,访问者点击 Google 的一篇文章,返回主页,然后导航到特定页面。这些信息可以帮助博主改进他们网站的设计和导航。这个工具叫做LLOOGG,它的主页上有几行强调了它与 Google Analytics 的不同之处。

让 LLOOGG 与众不同的是它能够让网站管理员跟踪访问者在其网站上的实时活动。Google Analytics 直到 2011 年才引入此功能,而 LLOOGG 于 2007 年推出,展示了其创新性。

起初,antirez 尝试使用 MySQL,但很快就遇到了性能问题。每次 MySQL 读取或写入数据时,它都必须访问硬盘驱动器。随着数据量的增长,操作成为硬盘读写速度的瓶颈,导致网站陷入停顿。从现代的角度来看,有经验的后端工程师会告诉你不要将 MySQL 用于实时应用程序,但这在 2007 年并不是那么明显。

antirez 认为使用内存可以解决这个问题,因此他用Tcl编程语言编写了一个内存数据库的原型。命名为LMDB(LLOOGG 内存数据库),这是 Redis 的前身。源代码只有 300 多行,但足以让您对 Redis 的发展方向有一个很好的了解。

首先,原型已经支持SET、GET、LPUSH、RPUSH等基本命令。支持两种数据类型:字符串和列表。此外,服务器和客户端之间的通信协议与 Redis v1 使用的协议相同。它被设计成人类可读和快速解析。

Redis 的默认端口号 6379 也在Tcl 源代码中。它有一个有趣的背景故事。在电话键盘上,6379 是 MERZ。这个词的灵感来自意大利歌舞女郎Alessia Merz 。Alessia 在电视上的有趣评论经常逗乐 antirez 和他的朋友们。在朋友之间,他们会用“that’s merz!”来形容一些愚蠢或毫无意义的事情。十多年来,“merz”一词逐渐在他们的圈子中演变,用来描述看似愚蠢但具有技术黑客价值的事物。这可能也解释了他们公司名称 Merzia 的由来。

在Tcl源码的前几行,antirez导入了一个包但是没有使用,只留下注释,# For [fork]. 他想使用fork()系统调用实现数据持久化,这是一种将数据写回硬盘的机制。这仍然是 Redis RDB 的工作方式,直到今天:fork()创建一个将数据写入磁盘的子进程,而父进程继续执行其原始任务。Tcl 源代码并没有真正使用fork(),antirez 只是在那里留下了评论。那是他意识到 Tcl 已经达到极限并且是时候用 C 重写它的时候了。

2009 年 2 月,antirez 的朋友 David Welton 帮助他在 Hacker News 上向全世界分享了 Redis 。反应很安静;除了大卫,只有四个人回应。其中三人表示已经有类似的项目,只有一人积极响应并主动提供帮助。那个人就是 Ezra Zygmuntowicz(不幸于 2014 年逝世,安息),他在 Ruby on Rails 社区已经相当有名,并且是 EngineYard 的联合创始人。Ezra 为 Redis 编写了 Ruby 客户端的初始版本redis-rb,直到今天它仍然是首选的 Ruby 客户端。而 redis-rb 对 Redis 在 Ruby 社区的流行起到了关键作用。

五年多来,Redis 为 LLOOGG 处理了 20 亿次页面浏览。2014 年站点关闭时,Redis 每秒处理 350-400 个命令。所有这些都在一台每月只需 150 美元的虚拟机上运行。

早期采用 GitHub、Instagram 和 Twitter

尽管 Hacker News 上反应平淡,但 antirez 在日常工作之外继续开发 Redis。这种情况持续了大约一年,逐渐吸引了用户。

当时,他还有另外两个开源项目:hping 和Jim Interpreter,但 Redis 是他认为第一个值得长期投资的项目。在对网络安全失去兴趣后,他停止开发 hping。由于对 Tcl 的发展方向和拥抱 Ruby 的幻想破灭,他停止了 Jim Interpreter 的工作。但他确信自己离不开数据库,因此他认为 Redis 会取得成功并继续开发它。即使它没有成功,他也知道他会在未来几年使用它。

2009 年,Redis 发布的同年,一家名为 GitHub 的初创公司的首席执行官 Chris Wanstrath 使用 Redis 构建了一个名为Resque的作业队列系统,用于运行 GitHub 的后台任务。在 Rails 世界中,Resque 是当时最流行的作业队列系统。继任者Sidekiq出现于 2012 年,也是基于 Redis 构建的,现在是 Rails 应用程序开发人员的首选。

另一家初创公司 Instagram 在 2010 年开始与 antirez 取得联系。在那些邮件中,其联合创始人之一 Mike Krieger 讨论了如何使用 Redis 构建 Instagram。Instagram 和 Redis 都是刚刚起步,Mike 和 antirez 还不认识。Instagram早年完全建立在 Redis 之上,所以如果没有 Redis,Instagram 可能不会存在,或者至少会被推迟。

2010年,Twitter也加入了Redis用户的行列。Twitter 的关键功能“时间线”由 Redis 提供支持。有趣的是,在 Redis 推出后不久(2009 年 3 月),antirez 构建了一个名为Retwis的 Twitter 克隆来展示 Redis 应用程序。

VMware 和 Redis Labs 赞助

在大约一年的时间里,Redis 只不过是 antirez 的一个爱好项目。他改进了它并免费发布了新版本,直到有一天他接到了 VMware 的电话。

“我们愿意在经济上支持 Redis,”他们说。“我们在意大利有一个办公室,我们想雇用你。你愿意成为我们的员工吗?” 当 antirez 问他需要为他们做什么时,他们向他保证,“不,不,不,你只要继续你目前正在做的事情,我们就会付钱给你。你需要做的就是在你的网站上提到Redis 由 VMware 赞助。”

VMware

就这样,Redis 获得了它的第一个主要赞助商。antirez 在 Redis 方面与 VMware 合作了数年。当 VMware 后来与 Pivotal 分道扬镳时,他搬到了 Pivotal。

随着 Redis 获得更多用户,第一批提供 Redis 咨询服务的公司出现了。其中有一家来自以色列特拉维夫的公司,名为 Redis Labs。该公司最初名为 Garantia Data,以数据库供应商起家,后来更名为 Redis Labs,并将重心转移到与 Redis 相关的业务上。

Pivotal 和 Redis Labs 有一位共同的投资者,有一天他向 antirez 建议,“你在 VMware 做什么?去 Redis Labs。那是你的产品支持中心所在的地方。” 因此,antirez 搬到了 Redis 实验室,从那以后他一直在那里工作。2021 年 8 月,Redis Labs 正式更名为 Redis,将项目网站redis.io变为公司网站。

十年后

在 Redis 诞生十年后,2020 年 1 月,antirez 站在 Redis Day 大会的舞台上,用他标志性的意大利口音英语介绍了Redis 6.0 的新特性。在Twitter上,您可以找到当天与会者与 antirez 的一些照片。

回顾Redis这十年的成长历程:

  • 2009 年 2 月 ? 字符串、列表
  • 2009 年 9 月 1.0 集合,排序集合,持久化(RDB,AOF),…
  • 2010 年 9 月 2.0 哈希、pub/sub、位图、Lua 脚本、HyperLogLog……
  • 2015 年 4 月 3.0 集群、地理空间索引
  • 2017 年 7 月 4.0 模块:RediSearch、RedisJSON、RedisGraph、…
  • 2018 年 10 月 5.0 溪流
  • 2020 年 1 月 6.0 SSL、ACL、…

同年 6 月,antirez 发表博文称,他决定辞去 Redis 项目开发和维护者的职务。尽管他将继续担任 Redis Labs 的顾问,提供建议,但他将不再直接参与开发。十多年来对同一个项目的投入让 antirez 感到筋疲力尽。

对于 antirez 来说,编程是一种表达自我的方式,一种艺术形式。每个字符和换行符都必须精心制作,类似于写作的艺术形式。软件开发就像写一本书——它必须美观、优雅且易于理解。如果该软件碰巧对其他人有用,那只是副作用。

当然,安蒂雷兹明白这个想法不切实际。当您的软件被大规模采用时,您必须做出许多妥协,这可能会使您的软件不够完美,但对人们更有用。维护 Redis 变得越来越具有挑战性,让他在艺术和实用之间左右为难。这场斗争让antirez倍感疲惫和压力,渴望回归艺术家身份,创造纯粹的编程艺术。

离开 Redis 项目后,antirez 写了一部关于人工智能的科幻小说《Wohpe》,于 2022 年 7 月出版。同年 4 月,Redis 团队发布了 7.0 版本。这是自 antirez 离开该项目以来的第一个主要版本。